import {ElTableColumn} from "element-plus";
import {ElScope} from "./elScope";
import {DefaultProp} from "./defaultProp";
import {Dict} from "./dict";
import {FormElScope} from "./formElScope";
import {BasicScope} from "./basicScope";

/**
 * 列属性
 */
export interface Column<R> extends ElScope<typeof ElTableColumn, R> {
    /**
     * 字段名，必填
     */
    field: string;
    /**
     * 字段描述，用来显示表头、表单标签文本
     */
    label: string;
    /**
     * 选项列表，type为select/checkbox/radio/cascader/tag时可用
     * 同步代码可以使用Array<any>，异步获取的必须用()=>Array<any>
     */
    options?: Array<any> | (() => Array<any>);
    /**
     * 格式化表格列，接收当前字段值作为参数
     * @param value
     */
    format?: (value: any) => any;
    /**
     * tag类型映射，配合{@link options}使用，如：{0:'danger',1:'success'}
     */
    tagMapping?: object;

    /**
     * {@link options}选项的默认字段
     */
    defaultProp?: DefaultProp;
    /**
     * {@link options}字典（选项的动态列）
     */
    dict?: Dict;
    /**
     * 对应搜索栏中的同字段表单项
     */
    $search?: FormElScope<any, R>;
    /**
     * 对应弹出层中的同字段表单项
     */
    $dialog?: FormElScope<any, R>;
    /**
     * 表头作用域
     */
    $header?: BasicScope<any>;
    /**
     * 是否在新增时禁用
     */
    disabledInAdd?: boolean;
    /**
     * 是否在编辑时禁用
     */
    disabledInEdit?: boolean;
    /**
     * 是否在查看时禁用
     */
    disabledInView?: boolean;
    /**
     * 表格字段可编辑，值显示方式必须为默认(即不能设置type|component|render)
     * 编辑栏失去焦点时触发{@link submit}方法
     */
    editable?: boolean;
    /**
     * 可编辑表格字段失去聚焦时的回调
     * @param value 当前值
     * @param row 当前行
     * @param done submit执行完时需手动调用
     */
    submit?: (value: any, row: R, done: () => void) => void;
}
